package com.doit.day05

/**
 * 现在有三个数组，每个数组代表的是每个城市的当天温度
 * 现在要求：每个城市三天的平均温度
 */
object _01_算子 {
  def main(args: Array[String]): Unit = {
    val d1 = Array(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 31.0))
    val d2 = Array(("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3))
    val d3 = Array(("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.0))

    //所有的城市温度全部放在一个数组中
    val allData: Array[(String, Double)] = d1 ++ d2 ++ d3

    //按照城市，把所有的温度放在一起 ==》groupBy
    val map :Map[String,Array[(String, Double)]]= allData.groupBy(_._1)
    //==> shenzhen,Array((shenzhen,31.0),(shenzhen,32.0))

    //我接下来要干什么事？？？Array((shenzhen,31.0),(shenzhen,32.0))=》Array(31,32)
    val cityAndTmp: Map[String, Array[Double]] = map.map(tp => {
      //这玩意是个什么类型，它里面有什么数据  Array((shenzhen,31.0),(shenzhen,32.0))  格式全部变成value
      val value: Array[(String, Double)] = tp._2
      val tmp: Array[Double] = value.map(_._2)
      //最后想要的是什么  将城市和温度拼成元祖返回
      (tp._1, tmp)
    })

    //Array(31,32)  ==> 变成31.5 ==》 (31+32) / 2  ==> map
    //tp 是个什么类型  map(key:city,value:温度的数组)
    //是什么值
    cityAndTmp.map(tp=>{
      val avgTmp: Double = tp._2.sum/tp._2.length
      //要返回什么
      (tp._1,avgTmp.formatted("%.2f").toDouble)
    }).foreach(println)


  }

}
